Serverless computing refers to a computing model where the existence of servers is hidden from the program developer. Even though the servers exist, the developer is relieved from the need to consider the operation of the servers. For instance, the developer is relieved from the requirement to address low level infrastructural and operational details such as scalability, high-availability, infrastructure security, etc. Hence, serverless computing is essentially about reducing maintenance efforts to allow developers to focus on developing value-adding code. The serverless programming model encourages a simplified development of microservice-orientated solutions, often providing powerful primitives to decompose complex applications into small independent modules that can be exchanged and run on a serverless platform.
Currently, most serverless computing solutions rely on launching containers. Container-based data processing systems provide a way to run almost any application in an isolated manner within a container. A container may consist of an application, user-added files, and metadata for the application. Each container is built from a container image, which may specify what the container holds, what process to hold when the container is launched, and a variety of other configuration data. The container image is a read-only template from which the container is launched. The container image may consist of a series of layers. When a container image needs to be changed (for example, an application needs to be updated to a new version), a new layer may be built. Rather than replacing or entirely rebuilding the whole container image as may be done with a virtual machine, only that layer needs to be updated or added. In implementation, all containers share the same host kernel and the same operating system, which potentially weakens isolation. Additionally, support must be provided for different programming languages, as well as different versions of each of the programming languages. In particular, in a container-based data processing system, a container image is required for every supported programming runtime configuration, such as for each different version.